分支的整併方式有二,分別是merge及rebase
merge之前就有用過
這次練習一下rebase
我們先在master這個分支上另建一個分支iss2
接著在master上繼續開發並且commit
再來切換到iss2上去解iss2的問題
解完也commit一版
現在從master的角度看的線圖就會是這樣
如果用之前提過的merge方式去合併(在master上用指令git merge iss2)
線圖會是這樣
一個這樣的情況就多了一條這種merge的線
專案中有很多這種分支合併的情況時,線圖就會很亂
rebase指令可以解決這個問題
我們先將master版本reset到還沒合併前的HEAD,也就是我的版本8a7738a...
切換到iss2
git checkout iss2
下指令git rebase master
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: start fix iss2
Using index info to reconstruct a base tree...
M index.html
Falling back to patching base and 3-way merge...
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Failed to merge in the changes.
Patch failed at 0001 start fix iss2
The copy of the patch that failed is found in:
/Users/morrishsu/Documents/git/momoRep/.git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
會發現上面有一堆提示訊息,主要是表達你去解決一下衝突,若衝突解決可以再次使用git rebase --continue指令來繼續rebase作業
若要取消的話就可以下git rebase --skip
所以當我們解決了衝突後
一樣先用git add .
這邊不需要commit
現在衝突已解決
可以下git rebase --continue
$ git rebase --continue
Applying: start fix iss2
Applying: iss2 fixed
Using index info to reconstruct a base tree...
M index.html
Falling back to patching base and 3-way merge...
Auto-merging index.html
在時候去看線圖會是這樣
可以發現跟之前用merge指令時產生的線圖不一樣
只有一條線,沒有分歧之後又合併的線
作完上述步驟後還要記得在master上執行merge來合併rebase後的commit
git merge iss2